package kuang;

/**
 * @author cyt
 * @create 2020-03-07 9:42
 */

/**
 * 代理对象
 * 目标对象
 * 目标对象和代理对象都需要实现一个公共的接口
 * 代理对象可以帮助目标对象来做一些事情， 这样目标对象就可以专注于自己的事情中了。
 * 要完成这样， 代理对象就需要能够得到目标对象
 */
public class StaticProxy {

    public static void main(String[] args) {
        widding widding = new widding(new you());
        widding.happymarry();
    }
}


// 接口
interface Marry {
    void happymarry();
}

// 目标对象， 真实对象。
class you implements Marry {
    @Override
    public void happymarry() {
        System.out.println("Cyt要结婚了");
    }
}

// 代理对象， 它需要得到目标对象（真实对象）， 然后帮助真实对象做事情。
// 除了目标对象的事情之外， 它还可以做一些额外的事情来。
class widding implements Marry {

    private Marry marry;

    public widding(Marry marry) {
        this.marry = marry;
    }

    @Override
    public void happymarry() {
        befrom();
        this.marry.happymarry();
        after();
    }

    void after() {
        System.out.println("结婚之后。。。。");
    }

    void befrom() {
        System.out.println("结婚之前。。。。");
    }
}
